package orchestration.android.parcelable;

import orchestration.businessprocess.execution.Property;
import orchestration.utils.PropertyUtils;
import android.os.Parcel;
import android.os.Parcelable;

/**
 * @author  <a href="mailto:car.ferrarini@gmail.com">Carlo Ferrarini</a>
 */
public class ParcelableProperty extends Property implements Parcelable {

	/**
	 * @uml.property  name="parcelableArtifact"
	 * @uml.associationEnd  
	 */
	private ParcelableArtifact parcelableArtifact;
	
	public ParcelableProperty(ParcelableArtifact artifact) {
		super(artifact);
		this.parcelableArtifact=artifact;
	}

	@Override
	public int describeContents() {
		return 0;
	}
	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeLong(getId());
		dest.writeParcelable(parcelableArtifact, flags);
		PropertyUtils.writePropertyValueToParcel(dest, this);
	}
	
	public static final Parcelable.Creator<ParcelableProperty> CREATOR
    = new Parcelable.Creator<ParcelableProperty>() {
		public ParcelableProperty createFromParcel(Parcel in) {
		    long id= in.readLong();
		    ParcelableArtifact artifact=ParcelableArtifact.CREATOR.createFromParcel(in);
		    ParcelableProperty result= new ParcelableProperty(artifact);
		    result.setId(id);
		    PropertyUtils.readPropertyValueFromParcel(in, result);
		    return result;
		}
		
		public ParcelableProperty[] newArray(int size) {
		    return new ParcelableProperty[size];
		}
	};

}
